热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

蛙跳|汉密尔顿_theano学习指南混合蒙特卡洛采样(翻译)

篇首语:本文由编程笔记#小编为大家整理,主要介绍了theano学习指南--混合蒙特卡洛采样(翻译)相关的知识,希望对你有一定的参考价值。欢迎fork我的github&#x

篇首语:本文由编程笔记#小编为大家整理,主要介绍了theano学习指南--混合蒙特卡洛采样(翻译)相关的知识,希望对你有一定的参考价值。


欢迎fork我的github:https://github.com/zhaoyu611/DeepLearningTutorialForChinese

最近在学习Git,所以正好趁这个机会,把学习到的知识实践一下~ 看完DeepLearning的原理,有了大体的了解,但是对于theano的代码,还是自己撸一遍印象更深 所以照着deeplearning.net上的代码,重新写了一遍,注释部分是原文翻译和自己的理解。 感兴趣的小伙伴可以一起完成这个工作哦~ 有问题欢迎联系我 Email: zhaoyuafeu@gmail.com QQ: 3062984605




理论

能量模型的最大化似然函数需要一个鲁棒算法对负项进行采样。(见 Restricted Boltzmann Machines (RBM)的公式4)。当使用CD或PCD训练RBms时,通常使用块Gibbs采样,其中条件分布

p(h|v)


p(v|h)
是马尔科夫链的转换操作。
然而在某些情况下,这些条件分布难以采样(例如RBM的均方差,逆矩阵)。同样,即使能够有效的Gibbs采样,由于它采用随机采样,所以对某些分布效果可能不理想。本文中,当从连续变量中采样时,可以证明混合蒙特卡洛法(HMC)是一种有效的工具[Duane87]。它模仿物理系统中的密尔顿动力学,从而较好了解决了条件分布的采样过程。
在HMC,模拟物理系统进行采样。物理系统中粒子拥有势能和动能,从而在高维空间运动。根据 [Neal93]提出的概念,粒子可以通过位置矢量(或状态矢量

sRD
)和速度矢量

ϕRD
。粒子的组合态表示为

χ=(s,ϕ)
。汉密尔顿定义为势能

E(s)
(能量模型使用同样的能量函数)和动能的总和。定义如下:






相比直接采样



p(s)
,HMC从正则分布
采样。因为两个变量是相互独立的,边缘化的



ϕ
是原始分布无重要影响。

汉密尔顿动力学

在仿真环境中,即使状态量

ϕ
和速度量

ϕ
发生变化,

H(s,ϕ)
也会保持不变。微分方程如下:
(1)
[Neal93]指出,上述变换是可逆的。上述动力学方程可以看做是马尔科夫链的变形,但

p(s,ϕ)
是保持不变的。链本身不会变化,因为仿真动力学方程会保持固定的汉密尔顿函数

H(s,ϕ)
。HMC在汉密尔顿动力学函数和速度的Gibbs采样中交替进行。因为

p(s)


p(ϕ)
相互独立,所以无须进行

ϕnewp(ϕ|s)
,因为

p(ϕ|s)=p(ϕ)
,通常

p(ϕ)
是单变量高斯分布。


蛙跳算法

事实上,由于研究的问题是时间离散的,所以我们无法精确的计算汉密尔顿动力学方程。这里有若干解决途径。为了保持马尔科夫链的不变性,必须保持容积恒定和时间可逆的属性。蛙跳算法保持这些属性,并执行三步操作:
(2)
在时刻

t+ϵ/2
我们执行半步速度更新,来计算

s(t+ϵ)


ϕ(t+ϵ)


接受/拒绝

事实上,有限步长

ϵ
不能精确的保证

H(s,ϕ)
恒定,所以引入偏置的概念。另一方面,浮点数的舍入误差意味着变换过程并不是完全可逆的。
HMC在

n
步蛙跳后,引入了接受/拒绝阶段。新状态量χ=(s,ϕ)以概率

pacc(χ,χ)
接受。

pacc(χ,χ)
定义为:


HMC算法

本教程中,获得新的HMC样本方法如下:


  1. 根据单变量高斯分布采样新的速度
  2. 执行

    n
    步蛙跳获得新的状态量χ


  3. χ
    执行接受/拒绝

使用Theano运行HMC

在Theano中,更新字典和共享变量为执行采样算法提供了最自然的方法。样本当前状态量可以用Theano共享变量表示,而HMC的更新列表通过Theano的更新函数获得。
将HMC算法分解为以下子组件:


  • simulate_dynamics:Python符号函数,输入为初始位置和速度,执行

    n_step
    蛙跳更新,并返回符号变量:计算的状态量

    χ
  • hmc_move:Python符号函数,输入为起始位置,随机采样速度矢量,生成状态量

    χ
    。然后调用simulate_dynamics函数,决定是否接受从

    χχ
    的转换。
  • hmc_updates:Python函数,输入为hmc_move的符号输出量,输入为一次HMC过程的更新列表。
  • HMC_sampler:Python类,整合上述函数

simulate_dynamics

为了执行

n
步蛙跳采样,我们这里定义一个函数便于Scan函数的使用。不同于公式(2),我们可以对ϕ执行前半步更新,然后对

s
ϕ执行

n
步更新,对ϕ执行后半步更新,从而获得

s(t+nϵ)


ϕ(t+nϵ)
。对于循环形式,可以写做:
(3)
公式中内循环是通过执行leapfrog函数实现的,其中分别用

pos,ve var cpro_id = "u6885494";

推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 【MicroServices】【Arduino】装修甲醛检测,ArduinoDart甲醛、PM2.5、温湿度、光照传感器等,数据记录于SD卡,Python数据显示,UI5前台,微服务后台……
    这篇文章介绍了一个基于Arduino的装修甲醛检测项目,使用了ArduinoDart甲醛、PM2.5、温湿度、光照传感器等硬件,并将数据记录于SD卡,使用Python进行数据显示,使用UI5进行前台设计,使用微服务进行后台开发。该项目还在不断更新中,有兴趣的可以关注作者的博客和GitHub。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了Java的集合及其实现类,包括数据结构、抽象类和具体实现类的关系,详细介绍了List接口及其实现类ArrayList的基本操作和特点。文章通过提供相关参考文档和链接,帮助读者更好地理解和使用Java的集合类。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
author-avatar
家居生活我最大_386
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有